﻿namespace Whoot
{
    /// <summary>
    /// Whoot Service Provider 服务提供者
    /// 为何加入服务提供者：因为在不同的框架版本中，模块可能会使用不同的脚本。
    /// 这样在使用者更新版本时，不用去管当前版本服务具体实现了哪一个脚本。也就可以同时存在V1 V2 V3等
    /// Core.BindService<IUIKit,UIKit>(); 如上，这样当UIKit 变成 UIKitV2时，使用者并不需要修改，由服务提供者自行注册
    /// </summary>
    public interface IServiceProvider
    {
        string ServiceName { get; }

        /// <summary>
        /// 最先执行
        /// </summary>
        /// <returns>如果返回非null，则框架初始化终止 </returns>
        void OnInit();

        /// <summary>
        /// OnInit之后， OnStart之前执行
        /// </summary>
        void OnServiceRegister();
        
        /// <summary>
        /// OnInit 和 OnServiceRegister 之后执行
        /// </summary>
        /// <returns>如果返回非null，则框架初始化终止</returns>
        void OnStart();

        void OnQuit();
        void OnRestart();
    }
}